#include "xprotocol.h"
#include<QFile>
#include<QFileInfo>

void headerFirst(QByteArray& data,XProtocol::XHeader& header){
    data.prepend(reinterpret_cast<char*>(&header),sizeof(header));
}

void XProtocol::msg(QString str){

    if(tcp->isOpen()){
        QByteArray data;

        header.type = XMSG;

        data.append(str);

        header.length = data.length();

    //    data.prepend(reinterpret_cast<char*>(&header),sizeof(header));
        headerFirst(data,header);
    //    qDebug()<<data.length();
    //    qDebug() << (int)data[0] << " " << (int)data[1];
    //    qDebug() <<"================";
    //    foreach (auto &d, data) {
    //        qDebug() << (int)d;
    //    }

        tcp->write(data);
    }

}

void XProtocol::close(){
    if(tcp->isOpen()){
        QByteArray data;
        header.type = XCLOSE;
        header.length = 0;
        headerFirst(data,header);
    //    foreach (auto &d, data) {
    //            qDebug() << (int)d;
    //    }

        tcp->write(data);

        tcp->close();
    }

}


QString XProtocol::msg(){

    return QString(tcp->readAll());

}


void XProtocol::uploadFile(QString path){


    if(tcp->isOpen()){
        QFile f(path);
        if(!f.open(QIODevice::ReadOnly)){
            qDebug()<< "open file failed: "<<path;
            return;
        }
        QFileInfo fi(f);
        header.type = XFILE;
        header.length = fi.size();

        qint64 len = fi.size();


        //header send first
        QByteArray data;
        headerFirst(data,header);
        tcp->write(data);

        while(len>0){
            len -= tcp->write(f.read(1024));
        }
        qDebug() << "send file over";
    }




}













